package wei.qiang.ye.springcomponentdemo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import wei.qiang.ye.springcomponentdemo.condition.MyCondition;
import wei.qiang.ye.springcomponentdemo.domain.User;

@Configuration
public class WebConfig {

    @Bean
    public User user3() {
        return new User("user3", 18);
    }

    /**
     * 懒加载是针对单例模式而言的，正如前面所说，IOC容器中的组件默认是单例的，
     * 容器启动的时候会调用方法创建对象然后纳入到IOC容器中。
     * @Lazy 懒加载的功能是，在单例模式中，IOC容器创建的时候不会
     * 马上去调用方法创建对象并注册，只有当组件第一次被使用的时候才会调用方法创建对象并加入到容器中。
     *
     * @return
     */
    @Lazy
    @Bean()
    public User user() {
        System.out.println("往IOC容器中注册user bean");
        return new User("mrbird", 18);
    }

    @Conditional(MyCondition.class)
    @Bean()
    public User user2() {
        return new User("meimei", 18);
    }
}